/*
 * 根据配置文件生成 业务处理 实现类
 *
 * VERSION  DATE        BY              REASON
 * -------- ----------- --------------- ------------------------------------------
 * 1.00     2014.07.24  wuxiaogang      程序・发布
 * -------- ----------- --------------- ------------------------------------------
 * Copyright 2014 easycode System. - All Rights Reserved.
 *
 */
package cn.com.softvan.easycode.utils;

import java.io.File;
import java.io.PrintWriter;
import java.util.List;

import cn.com.softvan.common.StrUtils;
import cn.com.softvan.common.Validator;
import cn.com.softvan.easycode.bean.ConfigBean;
import cn.com.softvan.easycode.bean.TableBean;
/**
 * 根据配置文件生成 业务处理 实现类
 * @author wuxiaogang 
 *
 */
public class ServiceInterUtils {
	/**
	 * 生成 业务处理类
	 * @param config
	 * @return
	 */
	public static StringBuffer toFile(ConfigBean config){
		StringBuffer csb=new StringBuffer("");
		try {
			if(null==config){
				return csb;
			}
			//TODO 获取表列表
			List<TableBean> tables=config.getTables();
			if(null==tables){
				return csb;
			}
			for(TableBean table:tables){
				try {
					if("0".equals(table.getIsService())){
						continue;
					}
					//类名
					String className="";
					//bean类名
					String beanName="";
					//存放内容
					StringBuffer sb=new StringBuffer("");
					//TODO ---1-----版本注释 --2---依赖包引入---类功能注释----
					sb.append(HeaderUtils.getHeader(config, " 业务处理接口类", table,5));
					//TODO ---3----创建类
					sb.append("\n");
					sb.append("public interface ");
					if(Validator.isEmpty(table.getClassName())){
						className="I"+StrUtils.toUpperCase(StrUtils.getRidprefixTableName(config.getRidprefixlen(),table.getTableName()),"_")+"Manager";
						beanName=StrUtils.toUpperCase(StrUtils.getRidprefixTableName(config.getRidprefixlen(),table.getTableName()),"_")+"Bean";
					}else{
						className="I"+table.getClassName()+"Manager";
						beanName=table.getClassName()+"Bean";
					}
					if(Validator.notEmpty(table.getServiceName())){
						className="I"+table.getServiceName();
					}
					sb.append(className);

					
					//-//TODO--3.1--继承----3.2--接口实现----
					sb.append(HeaderUtils.setExtendsAndimplements(config, table, 5));
					
					//--
					sb.append("{\n");
					//-------------------begin----------------------------
					sb.append("\n\t/**	");
					sb.append("\n\t * <p>信息编辑。</p>	");
					sb.append("\n\t * <ol>[功能概要] 	");
					sb.append("\n\t * <div>新增信息。</div>	");
					sb.append("\n\t * <div>修改信息。</div>	");
					sb.append("\n\t * </ol>	");
					sb.append("\n\t * @return 处理结果	");
					sb.append("\n\t */	");
					sb.append("\n\tpublic String saveOrUpdateData("+beanName+" bean) throws Exception;	");
					
					sb.append("\n\t/**	");
					sb.append("\n\t * <p>信息编辑。</p>	");
					sb.append("\n\t * <ol>[功能概要] 	");
					sb.append("\n\t * <div>物理删除。</div>	");
					sb.append("\n\t * </ol>	");
					sb.append("\n\t * @return 处理结果	");
					sb.append("\n\t */	");
					sb.append("\n\tpublic String deleteData("+beanName+" bean) throws Exception;	");
					
					sb.append("\n\t/**	");
					sb.append("\n\t * <p>信息 单条。</p>	");
					sb.append("\n\t * <ol>[功能概要] 	");
					sb.append("\n\t * <div>恢复逻辑删除的数据。</div>	");
					sb.append("\n\t * </ol>	");
					sb.append("\n\t * @return 处理结果	");
					sb.append("\n\t */	");
					sb.append("\n\tpublic String recoveryDataById("+beanName+" bean) throws Exception;	");
					
					sb.append("\n\t/**	");
					sb.append("\n\t * <p>信息 单条。</p>	");
					sb.append("\n\t * <ol>[功能概要] 	");
					sb.append("\n\t * <div>逻辑删除。</div>	");
					sb.append("\n\t * </ol>	");
					sb.append("\n\t * @return 处理结果	");
					sb.append("\n\t */	");
					sb.append("\n\tpublic String deleteDataById("+beanName+" bean) throws Exception;	");
					
					sb.append("\n\t/**	");
					sb.append("\n\t * <p>信息列表 分页。</p>	");
					sb.append("\n\t * <ol>[功能概要] 	");
					sb.append("\n\t * <div>信息检索。</div>	");
					sb.append("\n\t * <div>分页。</div>	");
					sb.append("\n\t * </ol>	");
					sb.append("\n\t * @return 处理结果	");
					sb.append("\n\t */	");
					sb.append("\n\tpublic List<"+beanName+"> findDataIsPage("+beanName+" bean);	");
					
					sb.append("\n\t/**	");
					sb.append("\n\t * <p>信息列表。</p>	");
					sb.append("\n\t * <ol>[功能概要] 	");
					sb.append("\n\t * <div>信息检索。</div>	");
					sb.append("\n\t * <div>列表。</div>	");
					sb.append("\n\t * </ol>	");
					sb.append("\n\t * @return 处理结果	");
					sb.append("\n\t */	");
					sb.append("\n\tpublic List<"+beanName+"> findDataIsList("+beanName+" bean);	");
					
					sb.append("\n\t/**	");
					sb.append("\n\t * <p>信息详情。</p>	");
					sb.append("\n\t * <ol>[功能概要] 	");
					sb.append("\n\t * <div>信息检索。</div>	");
					sb.append("\n\t * <div>详情。</div>	");
					sb.append("\n\t * </ol>	");
					sb.append("\n\t * @return 处理结果	");
					sb.append("\n\t */	");
					sb.append("\n\tpublic "+beanName+" findDataById("+beanName+" bean);	");

					//-------------------end----------------------------
					sb.append("\n}");
					//文件保存路径 项目根目录+包路径+类名称
					String fileurl=config.getJavaDirUrl()+config.getServicePackage().replace(".", "/");
					//创建文件夹
			    	File saveDirFile = new File(fileurl);
			    	if (!saveDirFile.exists()) {
			    		saveDirFile.mkdirs();
			    	}
					//写入文件
					PrintWriter pw=new PrintWriter(fileurl+"/"+className+".java","utf8");
					pw.write(sb.toString());
					pw.close();
					
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return csb;
	}
}
